namespace CSharpPro._1016;

public class Demo2
{ 
    //作业1 键盘输入三个整数x、y、z，请把这三个数由小到大输出
    public void TestPrint()
    {
        Console.WriteLine("请输入三个整数（用空格分隔）：");
        string[] input = Console.ReadLine()?.Split() ?? Array.Empty<string>();
        
        if (input.Length != 3 || !int.TryParse(input[0], out int x) || 
            !int.TryParse(input[1], out int y) || !int.TryParse(input[2], out int z))
        {
            Console.WriteLine("输入格式错误，请输入三个整数！");
            return;
        }
        
        // 排序逻辑
        int temp;
        if (x > y) { temp = x; x = y; y = temp; }
        if (x > z) { temp = x; x = z; z = temp; }
        if (y > z) { temp = y; y = z; z = temp; }
        
        Console.WriteLine($"从小到大排序：{x} {y} {z}");
        
    }
    
    //作业2 打印出1-100之间所有不是7的倍数和不包含7的数字， 并求和。

    public void TestPrint1()
    {
        int sum = 0;
        Console.WriteLine("1-100之间符合条件的数字：");
        
        for (int i = 1; i <= 100; i++)
        {
            bool isMultipleOf7 = i % 7 == 0;
            bool contains7 = i.ToString().Contains("7");
            
            if (!isMultipleOf7 && !contains7)
            {
                Console.Write(i + " ");
                sum += i;
            }
        }
        
        Console.WriteLine($"\n这些数字的和为：{sum}");
        
    }
    
    //作业3 打印九九乘法表

    public void TestPrint2()
    {
        Console.WriteLine("九九乘法表：");
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                Console.Write($"{j}×{i}={i * j}\t");
            }
            Console.WriteLine();
        }
    }
    
    
    //作业4 一个数如果恰好等于它的所有真因子（即除了自身 外的所有因数）之和，这个数就称为"完数"。请编程求出1000以内的所有完数

    public void TestPrint3()
    {
        Console.WriteLine("1000以内的完数有：");
        for (int num = 2; num <= 1000; num++)
        {
            int factorSum = 1; // 1是所有数的真因子
            
            // 计算真因子之和
            for (int i = 2; i <= num / 2; i++)
            {
                if (num % i == 0)
                {
                    factorSum += i;
                }
            }
            
            // 判断是否为完数
            if (factorSum == num)
            {
                Console.Write($"{num}（真因子：1");
                for (int i = 2; i <= num / 2; i++)
                {
                    if (num % i == 0)
                    {
                        Console.Write($", {i}");
                    }
                }
                Console.WriteLine("）");
            }
        }
        
    }
    
    //作业5 键盘录入一个正整数，请求：1.它是几位数？2.逆序打印出各位数字。

    public void TestPrint4()
    {
        Console.WriteLine("请输入一个正整数：");
        if (!int.TryParse(Console.ReadLine(), out int number) || number <= 0)
        {
            Console.WriteLine("请输入有效的正整数！");
            return;
        }
        
        int temp = number;
        int digitCount = 0;
        string reversed = "";
        
        // 计算位数并拼接逆序字符串
        while (temp > 0)
        {
            reversed += temp % 10 + " ";
            temp /= 10;
            digitCount++;
        }
        
        Console.WriteLine($"这是一个{digitCount}位数");
        Console.WriteLine($"逆序打印：{reversed}");
        
    }
    
    //作业6 打印菱形，根据输入的行数，显示菱形形状
    public void TestPrint5()
    {
        Console.WriteLine("请输入菱形的行数（奇数）：");
        if (!int.TryParse(Console.ReadLine(), out int rows) || rows <= 0)
        {
            Console.WriteLine("请输入有效的正整数！");
            return;
        }
        
        // 确保行数为奇数
        if (rows % 2 == 0)
        {
            rows++;
            Console.WriteLine($"自动调整为奇数行数：{rows}");
        }
        
        int half = rows / 2;
        
        // 打印上半部分（含中间行）
        for (int i = 0; i <= half; i++)
        {
            Console.Write(new string(' ', half - i));
            Console.WriteLine(new string('*', 2 * i + 1));
        }
        
        // 打印下半部分
        for (int i = half - 1; i >= 0; i--)
        {
            Console.Write(new string(' ', half - i));
            Console.WriteLine(new string('*', 2 * i + 1));
        }
        
    }
}